package com.hsnn.medstgmini.trading.pur.controller;

import java.lang.reflect.Type;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.service.DicAreaManager;
import com.hsnn.medstgmini.base.std.model.StdCompinfo;
import com.hsnn.medstgmini.exception.MSException;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.model.UserType;
import com.hsnn.medstgmini.trading.pur.model.ReturnOrder;
import com.hsnn.medstgmini.trading.pur.model.ReturnStatus;
import com.hsnn.medstgmini.trading.pur.service.RuturnConfirmManager;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 退货确认
 * @author 蔡春龙
 * @date 2015年7月16日
 */
@Controller
@RequestMapping("/returnConfirm")
public class RuturnConfirmController {

	private static final Logger log = Logger
			.getLogger(RuturnConfirmController.class);

	@Autowired
	private RuturnConfirmManager ruturnConfirmManager;

	@Autowired
	private DicAreaManager dicAreaManager;

	@Value("#{sysProp['system.province']}")
	private String province;

	@Autowired
	private HttpServletRequest request;

	@Autowired
	private HttpSession session;

	/**
	 * @category 获取当前登陆人信息
	 * @date 2015年6月14日
	 * @return
	 */
	public SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}

	/**
	 * @category 进入退货单确认页面
	 * @date 2015年7月16日
	 * @return
	 */
	@RequestMapping("/toReturnConfirm")
	public String toReturnConfirm() {
		return "/trading/pur/returnConfirm";
	}

	/**
	 * @category 查询退货单确认列表
	 * @date 2015年7月16日
	 * @param orderPackage
	 * @return
	 */
	@RequestMapping("/getReturnConfirm")
	@ResponseBody
	public Pagination getReturnConfirm(ReturnOrder returnOrder) {
		log.info("[配送企业]查询退货单确认列表："+returnOrder);
		Pagination page = new Pagination(request);
		try {
			SysUser user = getUser();
			StdCompinfo comp = user.getInfo();
			returnOrder.setDelCompCode(comp.getCompCode());
			ruturnConfirmManager.getReturnConfirm(returnOrder, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}
	
	/**
	 * @category 退货明细
	 * @date 2015年12月1日
	 * @param model
	 * @param retCode
	 * @return
	 */
	@RequestMapping("/toReturnDetail")
	public String toReturnDetail(Model model, String retCode) {
		model.addAttribute("retCode", retCode);
		return "/trading/pur/returnDetail";
	}
	
	/**
	 * @category 退货明细
	 * @date 2015年12月1日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/getReturnDetail")
	@ResponseBody
	public Pagination getReturnDetail(ReturnOrder returnOrder) {
		log.info("退货明细:"+returnOrder);
		Pagination page = new Pagination(request);
		try {
			ruturnConfirmManager.getReturnDetail(returnOrder, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}

	/**
	 * @category 同意退货
	 * @date 2015年7月16日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/agreeReturnConfirm")
	@ResponseBody
	public Pagination agreeReturnConfirm(String array) {
		log.info("[配送企业]同意退货:"+array);
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(array)) {
				ReturnOrder returnOrder = new ReturnOrder();
				returnOrder.setReturnStatus(ReturnStatus.agree.getKey());
				SysUser user = getUser();
				Type type = new TypeToken<List<ReturnOrder>>() {
				}.getType();
				Gson gson = new Gson();
				List<ReturnOrder> list = gson.fromJson(array, type);
				ruturnConfirmManager.returnConfirm(returnOrder, user, list);
				page.setSuccess(true);
			}
		} catch (MSException e) {
			log.error("",e);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}

	/**
	 * @category 拒绝退货
	 * @date 2015年7月16日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/rejectReturnConfirm")
	@ResponseBody
	public Pagination rejectReturnConfirm(String array) {
		log.info("[配送企业]拒绝退货："+array);
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(array)) {
				ReturnOrder returnOrder = new ReturnOrder();
				returnOrder.setReturnStatus(ReturnStatus.reject.getKey());
				Type type = new TypeToken<List<ReturnOrder>>() {
				}.getType();
				Gson gson = new Gson();
				List<ReturnOrder> list = gson.fromJson(array, type);
				ruturnConfirmManager.returnConfirm(returnOrder, getUser(), list);
				page.setSuccess(true);
			}
		} catch (MSException e) {
			log.error("",e);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}

	/**
	 * @category 进入历史退货单列表页面
	 * @date 2015年7月16日
	 * @return
	 */
	@RequestMapping("/toReturnOrderHis")
	public String toReturnOrderHis() {
		return "/trading/pur/returnOrderHis";
	}

	/**
	 * @category 查询历史退货单列表(按退货单查询)
	 * @date 2015年7月16日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/getReturnOrderHis")
	@ResponseBody
	public Pagination getReturnOrderHis(ReturnOrder returnOrder) {
		log.info("[配送企业]查询历史退货单列表(按退货单查询)："+returnOrder);
		Pagination page = new Pagination(request);
		try {
			SysUser user = getUser();
			StdCompinfo comp = user.getInfo();
			returnOrder.setDelCompCode(comp.getCompCode());
			ruturnConfirmManager.getReturnOrderHis(returnOrder, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}

	/**
	 * @category 进入历史退货单明细列表页面
	 * @date 2015年7月16日
	 * @return
	 */
	@RequestMapping("/toReturnOrderHisDetail")
	public String toReturnOrderHisDetail(Model model, String retCode) {
		model.addAttribute("retCode", retCode);
		return "/trading/pur/returnOrderHisDetail";
	}

	/**
	 * @category 查询历史退货单明细列表
	 * @date 2015年7月16日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/getReturnOrderHisDetail")
	@ResponseBody
	public Pagination getReturnOrderHisDetail(ReturnOrder returnOrder) {
		log.info("enter getReturnOrderHis method");
		Pagination page = new Pagination(request);
		try {
			if (returnOrder == null) {
				returnOrder = new ReturnOrder();
			}
			SysUser user = getUser();
			// 获取当前登陆配送企业id
			if (user.getType() == UserType.ps.getKey()) {
				StdCompinfo comp = user.getInfo();
				if (comp != null) {
					returnOrder.setDelCompId(comp.getCompId());
				}
			}
			ruturnConfirmManager.getReturnOrderHisDetail(returnOrder, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 进入历史退货单明细列表页面
	 * @date 2015年7月16日
	 * @return
	 */
	@RequestMapping("/toReturnDrugHis")
	public String toReturnDrugHis() {
		return "/trading/pur/returnDrugHis";
	}

	/**
	 * @category 查询历史退货单明细列表(按药品查询)
	 * @date 2015年7月16日
	 * @param returnOrder
	 * @return
	 */
	@RequestMapping("/getReturnDrugHis")
	@ResponseBody
	public Pagination getReturnDrugHis(ReturnOrder returnOrder) {
		log.info("enter getReturnDrugHis method");
		Pagination page = new Pagination(request);
		try {
			SysUser user = getUser();
			StdCompinfo comp = user.getInfo();
			returnOrder.setDelCompCode(comp.getCompCode());
			ruturnConfirmManager.getReturnOrderHisDetail(returnOrder, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}

}
